Various forms of network data storage systems are known today. These forms include network attached storage (NAS), storage area networks (SANs), and others. Network storage systems are commonly used for a variety of purposes, such as providing multiple users with access to shared data, backing up critical data (e.g., by data mirroring), etc.
A network storage system typically includes at least one storage server, which is a processing system configured to store and retrieve data on behalf of one or more client processing systems (“clients”). A typical storage server manages one or more volumes storing data. A volume is a logical data set, or a logical data container, which is an abstraction of physical storage (e.g., disks) or parts thereof into a single logical storage object, and which is managed as a single administrative unit, such as by a file system layer. A volume may be defined from a larger group of available storage, such as an aggregate. A volume may be logically broken down into logical data sets (storage objects), which may contain one or more Redundant Array of Independent/Inexpensive Disks (RAID) groups. An aggregate is a logical aggregation of physical storage, such as a logical data container for a pool of storage, combining one or more physical mass storage devices (e.g., disks) or parts thereof into a single logical storage object, which contains or provides storage for one or more other logical data sets at a higher level of abstraction (e.g., volumes). A file system layer, which manages the underlying file system, is an application-level programmatic entity, which imposes a structure (e.g., hierarchical structure) on files, directors and/or other data contains stored and/or managed by a storage server, and which services read/write requests from clients of the storage server.
Storage administrators need a method to define and limit the amount of storage that is used by individuals who have access to a shared data storage resource. The administrator may wish to limit storage to particular individuals for administrative reasons, financial reasons, or the like. The administrators may also wish to control the rate of growth of data stored in the storage system. In order to limit the amount of storage used by an individual, some file systems, managed by the file system layer, have a quota of storage resources that can be used by a user to limit the storage usage by a user on a volume. A quota is a limit on the amount of storage resources that can be allocated to the user. There are different types of quotas, for example, usage quota, block quota, file quota, or inode quota. Usage and block quota limit the amount of disk area that can be used. File and inode quotas limit the number of files and directories that can be created. Specific quotas can be applied to individual users, or alternatively, a default user quota can be established that applies to all users utilizing space within the volume. An inode stores basic information about a file, directory, or file system object. Quotas may also be applied to a group of users in a similar manner as with individual users. That is, a system or storage administrator defines a usage or file quota specific to a certain user or group of users. Alternatively, quotas may be implemented for other entities than an individual user or a group of users, such as Human Resources (HR), Engineering, or the like. In addition, administrators typically define a warning level, i.e., a soft quota, at which users are informed they are nearing their limit, which is less than the effective limit, i.e., a hard quota. Also, there may be a grace interval, which allows users to temporarily violate their quotas by certain amounts if necessary. In defining and implementing quotas on storage server, an administrator can prevent one user from consuming an entire file system's resources, or create a system of tiered access, in which users can have different levels of restriction. This may be used, for example, to provide different levels of service based upon the needs of individual clients.
In conventional systems, quotas are specific to individual file systems. In particular, quotas are specific to a particular volume on a storage server, and are implemented on a per-volume basis. As such, in a storage system having multiple storage servers, should an administrator want to limit the usage of a specific user on more than one file system, a separate quota would have to be specified on each file system. This creates a problem for data storage system in which the administrator desires to limit the usage of a specific user to data stored over multiple storage servers. For example, in cluster and/or distributed environments, data associated with a particular user may be stored over multiple volumes across multiple nodes. Conventional storage systems that implement quota on a per-volume basis are inadequate to implement quota for these types of system, since a quota needs to be established for each volume. The problem with defining separate quotas for the same users on separate volumes is that each quota for each volume is fixed in order to have a fixed total quota. This fixed total quota is not flexible. For example, to have a 500 gigabyte (GB) quota on two volumes (e.g., volume 1 and volume 2) for a user, the conventional systems define a quota on each volume, such as 250 GB on volume 1 for the user, and 250 GB on volume 2 for the user; which is not what the administrator is wanting to achieve. The administrator would rather have a quota for the two volumes, not limiting the user to 250 GB on either volume, but to 500 GB total usage.